/*
 * Copyright (c) 2022 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import { normalizeArguments } from './parsePhoneNumber.js'
import parsePhoneNumber from './parsePhoneNumber_.js'
import ParseError from './ParseError.js'
import Metadata from './metadata.js'
import checkNumberLength from './helpers/checkNumberLength.js'

export default function validatePhoneNumberLength() {
	let { text, options, metadata } = normalizeArguments(arguments)
	options = {
		...options,
		extract: false
	}

	// Parse phone number.
	try {
		const phoneNumber = parsePhoneNumber(text, options, metadata)
		metadata = new Metadata(metadata)
		metadata.selectNumberingPlan(phoneNumber.countryCallingCode)
		const result = checkNumberLength(phoneNumber.nationalNumber, metadata)
		if (result !== 'IS_POSSIBLE') {
			return result
		}
	} catch (error) {
		/* istanbul ignore else */
		if (error instanceof ParseError) {
			return error.message
		} else {
			throw error
		}
	}
}